import axios from 'axios';
import store from '../store';


const service = axios.create({
    // process.env.NODE_ENV === 'development' 来判断是否开发环境
    // easy-mock服务挂了，暂时不使用了
    // baseURL: 'https://www.easy-mock.com/mock/592501a391470c0ac1fab128',
    baseURL: 'http://localhost:5069/',   //接口的基地址
    timeout: 5000 * 1000   //调用接口的超时时间，临时修改为5000秒，方便做断点调试
});
//请求拦截器
service.interceptors.request.use(
    config => {
        //获取令牌
        var tkn = store.getters.token
        //判断令牌是否为空
        if (tkn != "") {
            config.headers.Authorization = 'Bearer ' + tkn
        }
        return config;
    },
    error => {
        console.log(error);
        return Promise.reject();
    }
);
//响应拦截器
service.interceptors.response.use(response => {
    if (response.status === 200) {
        return response.data;
    } else {
        Promise.reject();
    }
    console.log('相应拦截器', response)
    return response
    },async function(error){
        //判断发生错误的状态是否是401
        if(error.response.status==401)
        {
            //进行处理
            console.log('响应拦截器-错误-401')
            //获取到刷新令牌
            const refreshToken=store.getters.refreshToken
            //判断是否有刷新令牌
            if(refreshToken)
            {
                //请求新的令牌
                try{
                    const res=await axios({
                        url:'http://localhost:5069/api/User/TokeComparison',//刷新令牌的接口
                        method:'post',
                        data:{
                            name:store.getters.usename,
                            id:store.getters.id
                        }
                        
                    })
                    console.log('请求新的token',refreshToken)
                    //保存到Vuex中
                    store.commit('set_token',{
                        refreshToken:refreshToken,
                        token:res.tokenInfo.tokenStr
                    })
                    //重新发送请求
                    // request是上面创建的axios的示例，他会自动从token中取出token并代入
                    return request(error.config)
                }catch(error){//发生错误
                    //清除token
                    store.commit('set_token',{})
                    //页面跳到登录页面(如果有token值，就不能到login)
                    const backtoUrl=encodeURIComponent(router.currentRoute.fullPath)
                    router.push('/login?backto='+backtoUrl)
                    return Promise.reject(error)
                }
            }else{
                //去到登录页
                //清除token
                store.commit('set_token',{})
                //页面跳到登录页面
                const backtoUrl=encodeURIComponent(router.currentRoute.fullPath)
                router.push('/login?backto='+backtoUrl)
                return Promise.reject(error)
            }
        }
    }, error => {
        console.log(error);
        return Promise.reject();
    }
);

export default service;
